﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SGT_ON;
using DevExpress.Web.ASPxEditors;
using System.Web.Security;

public partial class Empleado : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //si es nul, lo pongo para alta
        if (Request.QueryString["ID"] == null)
            fvEmpleado.ChangeMode(FormViewMode.Insert);
    }
    protected void ddlSectores_DataBound(object sender, EventArgs e)
    {
       
    }
    protected void ddlSectores_DataBinding(object sender, EventArgs e)
    {
        
    }
    protected void dsSectores_Selected(object sender, ObjectDataSourceStatusEventArgs e)
    {
        ONSectorColeccion _sectores = (ONSectorColeccion)e.ReturnValue;
        
        //Verifico si existe en los elementos.
        int _empleadoId;
        if (int.TryParse(Request.QueryString["ID"], out _empleadoId) == false)
            return;

        //obtengo empleado y verifico si el sector esta en el listado.
        ONEmpleado _empleado = ONEmpleado.CrearEmpleado(_empleadoId);
        if ((_empleado == null)
            || (_empleado.SectorId <= 0))
            return;

        //si llego aca es que el empleado tiene un sector asignado ahora tengo que verificar si esta en el listado del combo.
        if (_empleado.Sector.EstaActivo == false) //si es falso, no tiene que estar en el listado y lo agrego
        {   
                _sectores.Add(_empleado.Sector); // _ddlEmpleado.Items.Insert(1, new ListItem(_empleado.Sector.Nombre, _empleado.Sector.ID.ToString()));
        }
    }
    protected void cvUsuarioIdExiste_ServerValidate(object source, ServerValidateEventArgs args)
    {   
        if(ONEmpleado.ElUsuarioExiste(args.Value) == true)
            args.IsValid = false;
        else
            args.IsValid = true;
    }
    protected void btnEditar_Click(object sender, EventArgs e)
    {
        fvEmpleado.ChangeMode(FormViewMode.Edit);
    }
    protected void fvEmpleado_ItemInserted(object sender, FormViewInsertedEventArgs e)
    {
        //e.Exception;
    }
    protected void dsEmpleado_Deleted(object sender, ObjectDataSourceStatusEventArgs e)
    {
        Response.Redirect("EmpleadoListado.aspx");
    }
    protected void dsEmpleado_Inserted(object sender, ObjectDataSourceStatusEventArgs e)
    {
        ONEmpleado _empleado = (ONEmpleado)e.ReturnValue;

        // Asigno los roles
        AsignarRolesAlEmpleado(_empleado);
        
        if (_empleado == null)
            Response.Redirect("EmpleadoListado.aspx");
        else
            Response.Redirect("Empleado.aspx?ID=" + _empleado.ID.ToString());
    }

    protected void chkRoles_Load(object sender, EventArgs e)
    {
        //si es un usuario existente, activo los roles que tiene.
        int _usuarioId;
        string _usuario;
        if ((Request.QueryString["ID"] == null)
            || (int.TryParse(Request.QueryString["ID"], out _usuarioId) == false))
            _usuario = "";
        else
            _usuario = ONEmpleado.CrearEmpleado(_usuarioId).UsuarioId ;
                
        

        CheckBoxList _chkRoles = (CheckBoxList)sender;

        if (_chkRoles.Items.Count > 0) //salgo x q esta recargando
            return;

        //si no tengo elementos, los creo
        foreach (string _rol in Roles.GetAllRoles())
        {
            ListItem _item = new ListItem(_rol);
            _item.Selected = Roles.IsUserInRole(_usuario, _item.Text);
            _chkRoles.Items.Add(_item);
        }

        //if (_chkRoles.Items.Count > 0)   
        //    foreach (ListItem _item in _chkRoles.Items)
        //        _item.Selected = Roles.IsUserInRole(_usuario, _item.Text);
    }
    protected void dsEmpleado_Updated(object sender, ObjectDataSourceStatusEventArgs e)
    {
        int _empleadoId = int.Parse(Request.QueryString["ID"]);
        ONEmpleado _empleado = ONEmpleado.CrearEmpleado(_empleadoId);
        AsignarRolesAlEmpleado(_empleado);
    }
    
    private void AsignarRolesAlEmpleado(ONEmpleado pEmpleado)
    {
        CheckBoxList _chkRoles = (CheckBoxList)fvEmpleado.FindControl("chkRoles");

        foreach (ListItem _rol in _chkRoles.Items)
        {
            if (_rol.Selected == true)
            {
                if (Roles.IsUserInRole(pEmpleado.UsuarioId, _rol.Text) == false) //si no esta lo agrego
                    Roles.AddUserToRole(pEmpleado.UsuarioId, _rol.Text);
            }
            else if (Roles.IsUserInRole(pEmpleado.UsuarioId, _rol.Text) == true) //si tiene el rol, lo quito.
                Roles.RemoveUserFromRole(pEmpleado.UsuarioId, _rol.Text);
        }
    }
    protected void ListadoDeRoles_Load(object sender, EventArgs e)
    {
        try
        {
            BulletedList _listado = (BulletedList)sender;
            ONEmpleado _empleado = ONEmpleado.CrearEmpleado(int.Parse(Request.QueryString["ID"]));
            _listado.DataSource = Roles.GetRolesForUser(_empleado.UsuarioId);
        }
        catch { }
    }
    protected void btnHabilitarUsuario_Click(object sender, EventArgs e)
    {
        if (Request.QueryString["ID"] != null)
        {
            int _empleadoId = int.Parse(Request.QueryString["ID"]);
            ONEmpleado _empleado = ONEmpleado.CrearEmpleado(_empleadoId);
            _empleado.HabilitarAcceso();
            Response.Redirect("Empleado.aspx?ID=" + _empleadoId.ToString());
        }

    }
}
